In traditional GPUs, fixed function units are statically connected together to form a fixed function graphics pipeline. The output packets of each of the fixed function units, or fixed function stages, are designed to match the input packets of the downstream fixed function unit. A more flexible approach is to define the graphics pipeline in software as a program or programs running on a programmable processor. In such a pipeline, the functional stages are implemented in software with data being moved via a regular general purpose memory system.